﻿using System;
using System.Collections.Generic;
using Model.Clientes;

namespace Model.Contratos
{
    public interface IContratoService
    {
        Contrato ObterPorNumeroContrato(Int64 numeroContrato);
        IList<Contrato> ObterTodos();
        IList<Contrato> ObterTodosPorCliente(Cliente cliente);
        IList<Contrato> ObterTodosActivosPorCliente(Cliente cliente);
        IList<Contrato> ObterTodosFuturosPorCliente(Cliente cliente);
        IList<Contrato> ObterTodosTerminadosPorCliente(Cliente cliente);
        IList<Contrato> ObterTodosActivos();
        IList<Contrato> ObterTodosActivosPorData(DateTime data);
        IList<Contrato> ObterTodosFuturos();
        IList<Contrato> ObterTodosTerminados();
        IList<Contrato> ObterComRefeicoesAbertasAte(DateTime data);
        IList<Contrato> ObterContratoTemRefeicoesAbertasAte(Int64 numeroContrato, DateTime data);

        Contrato Actualiza(Contrato item);
        Contrato Insere(Contrato item);
        void Apaga(Contrato item);

        RefeicaoContrato ObterRefeicaoPorIdRefeicaoContratada(Int64 IdRefeicaoContratada);
        IList<RefeicaoContrato> ObterTodosRefeicaoPorContrato(Int64 numeroContrato);
        RefeicaoContrato Actualiza(RefeicaoContrato item);
        RefeicaoContrato Insere(RefeicaoContrato item);
        void Apaga(RefeicaoContrato item);

        OpcaoRefeicaoContrato ObterOpcaoPorIdRefeicaoContratadaCodOpcao(Int64 IdRefeicaoContratada, String codOpcao);
        IList<OpcaoRefeicaoContrato> ObterTodosOpcaoPorRefeicaoContratada(Int64 IdRefeicaoContratada);
        OpcaoRefeicaoContrato Actualiza(OpcaoRefeicaoContrato item);
        OpcaoRefeicaoContrato Insere(OpcaoRefeicaoContrato item);
        void Apaga(OpcaoRefeicaoContrato item);

        PrecoRefeicaoContrato ObterPrecoPorIdRefeicaoContratadaCodTipoPreco(Int64 IdRefeicaoContratada, String codTipoServico);
        IList<PrecoRefeicaoContrato> ObterTodosPrecoPorRefeicaoContratada(Int64 IdRefeicaoContratada);
        PrecoRefeicaoContrato Actualiza(PrecoRefeicaoContrato item);
        PrecoRefeicaoContrato Insere(PrecoRefeicaoContrato item);
        void Apaga(PrecoRefeicaoContrato item);

        UnidadeRefeicaoContrato ObterUnidadeRefeicaoContratoPorUnidadeRefeicao(Int64 idRefeicaoContratada, Int64 idUnidade);
        IList<UnidadeRefeicaoContrato> ObterUnidadeRefeicaoContratoPorUnidade(Int64 idUnidade);
        IList<UnidadeRefeicaoContrato> ObterUnidadesRefeicaoContratoPorRefeicaoContratada(Int64 idRefeicaoContratada);
        UnidadeRefeicaoContrato Actualiza(UnidadeRefeicaoContrato item);
        UnidadeRefeicaoContrato Insere(UnidadeRefeicaoContrato item);
        void Apaga(UnidadeRefeicaoContrato item);
    }
}
